/**
 * @Author       : Mo 2427995270@qq.com
 * @Date         : 2023-07-26 11:04:37
 * @LastEditTime : 2025-01-20 10:10:00
 * @FilePath     : /uvdevice/apps/libs/ver_control.h
 * @Description  : 参数版本管理
 * @Version      : V1.0
 * @History      :
 * @Note         :
 */

#ifndef __ver_control_H__
#define __ver_control_H__

/***************************************Includes***********************************/
#include <stdint.h>


/*************************************Public Macros********************************/
// #define


/***********************************Public Statement*******************************/

typedef struct ver_control {
    int32_t at_present_ver;                            // 当前版本 新版本
    int32_t _previous_ver;                             // 上个版本 参数实际的版本
    int32_t (*_get_version)(void);                     // 获取上个版本
    int32_t (*_set_version)(int32_t ver);              // 设置版本号
    int32_t (*_update_one)(int32_t ver);               // 升级一次版本
    int32_t (*update)(struct ver_control *vct);        // 升级版本
    int32_t (*factory_reset)(struct ver_control *vct); // 恢复出厂
} ver_control_t;

/***********************************Public Functions*******************************/
/**
 * @brief 版本控制器初始化
 * @param  vct
 * @param  at_present_ver   当前版本 新版本
 * @param  _get_version     获取上个版本号，返回 0成功 -1失败
 * @param  _set_version     设置版本号，返回 0成功 -1失败
 * @param  _update_one      升级一次版本，返回 0成功 -1失败
 * @return int 0成功 -1失败
 * @note null
 */
int32_t verc_init(ver_control_t *vct, int32_t at_present_ver,
                  int32_t (*_get_version)(void),
                  int32_t (*_set_version)(int32_t ver),
                  int32_t (*_update_one)(int32_t ver));

/**
 * @brief 获取当前参数版本
 * @return int 小于0 获取失败
 * @note null
 */
int32_t verc_get_version_ee(void);
/**
 * @brief 设置版本
 * @param  version
 * @return int -1失败 0成功
 * @note null
 */
int32_t verc_set_version_ee(int32_t version);
/**
 * @brief 升级一次参数
 * @param  version          当前参数的版本
 * @return int 升级后的版本(当前参数+1)  -1失败
 * @note null
 */
int32_t verc_update_one_ee(int32_t version);

/***************************************Public Variables**********************************/


#endif
/* [] END OF FILE */
